package jp.anago_dev.takarush_helper.ui;

import jp.anago_dev.takarush_helper.R;
import jp.anago_dev.takarush_helper.location.LocationService;
import jp.anago_dev.takarush_helper.ui.actionbar.ModernPreferenceActivity;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;

/**
 * 設定画面を表示します。<br/>
 * UIに関する処理のみ行います。
 * 
 * @author anago_dev
 * 
 */
public class SettingsActivity extends ModernPreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle(R.string.title_settings);
        addPreferencesFromResource(R.xml.app_settings);

        // 更新間隔のサマリ設定
        ListPreference updateLocationListPreference = (ListPreference) findPreference(getString(R.string.key_location_update_interval));

        // プリファレンス変更リスナ
        updateLocationListPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {

                if (preference != null) {
                    preference.setSummary(getUpdateLocationSummary((ListPreference) preference, (String) newValue));
                }
                return true;
            }
        });

        makeInitialSummary(updateLocationListPreference);

    }

    /**
     * 初回表示時のサマリを作成します。
     * 
     * @param listPreference
     *            {@link ListPreference}
     */
    private void makeInitialSummary(final ListPreference listPreference) {
        // 既に値があるかチェック
        String value = listPreference.getValue();
        CharSequence summary;

        // 値が無い場合
        if (value == null) {
            summary = getString(R.string.settings_location_update_interval_summary, LocationService.DEFAULT_LOCATION_UPDATE_INTERVAL / 60000 + getString(R.string.common_minites));
        }
        // 値がある場合
        else {
            summary = getUpdateLocationSummary(listPreference, value);
        }

        listPreference.setSummary(summary);
    }

    /**
     * 
     */
    /**
     * サマリの文章を作成します。
     * 
     * @param listPreference
     *            {@link ListPreference}
     * @param value
     *            {@link ListPreference}に格納されている値
     * @return 位置情報の更新間隔サマリ
     */
    private String getUpdateLocationSummary(final ListPreference listPreference, final String value) {

        CharSequence interval = listPreference.getEntries()[listPreference.findIndexOfValue(value)];

        return getString(R.string.settings_location_update_interval_summary, interval);
    }

}
